First in, first out (FIFO) queues are commonly used to organize and control data relative to time and prioritization. In a FIFO queue, data is output in the order in which it is received, so that the first data unit that enters the queue is the first data unit to be output from the queue.
FIFO queues may be particularly useful in controlling data transfer across two different clock domains. Data may be asynchronously written to and read from the FIFO queue using separate write and read signals. In such a system, errors in the operation of the FIFO queue may occur for a number of reasons, such as overflow and under-run of the FIFO.
Additionally, the depth of an asynchronous FIFO (i.e., the number of entries) may depend on the difference between the write and read rates as well as on the latency introduced by any control mechanism that is used to throttle writes to the FIFO. If the introduced latency is high, a deeper FIFO may be required. The complexity of the control mechanism may increase in situations in which the write domain produces multiple words per clock cycle that are to be sent to different read domains. In this situation, a number of asynchronous FIFOs may be used, which may increase the complexity of the control mechanism.